package com.yjhh.scala

/**
  *
  * Scala控制结构有顺序、条件、循环三种控制结构，这个与其他JVM语言是一样的，但是Scal还有一些高级流程控制结构模式匹配。
  * 主要做if、for、while等三种控制结构做练习
  *
  *
  */
object ControlStructures {

  /**
    * 1.Scala中的if条件表达式是有值的，与Java是不一样的
    * 2.if条件表达式中可以进行类型推导,根据变量的值得类型来推导确定变量的类型，
    *
    * @param args
    */
  def main(args: Array[String]): Unit = {
    var age = 30
    val result = if (age > 25) "Worker" else "Student" //返回的是String类型的变量
    println(result)

    val result2 = if (age > 18) "Adult" else 1 //返回的是一个Any类型

    val result3 = if (age > 18) "Audit" else ()

    val result4 = if (age > 18) "Audit" //result3与4是一样的，都返回Any类型

    println(result4)

    for (i <- 1 to 5 if (i == 2 || i == 3)) {
      println(i)
    }

    /**
      * for 循环是不断的循环一个集合
      * 1.for循环中加入的if叫做条件守卫，用于限制for循环（优化for循环）
      * 2.在for循环中能够提取出来什么内容取决于后边集合的类型
      * 3.想跳出for循环的话，除了加入if守卫外，还可以使用return关键字
      */


    var flag = true;
    var sum = 0;
    for (i <- 0.to(6) if flag) {
      sum += i
      if (i == 5) flag = false
    }

    println(sum);

    /*sum = 0;
    for (i <- 0.to(6)) {
      sum += i
      if (i == 5) return //return返回的是方法级别的，
    }*/

    println(sum);


    for (item <- "Hello Spark") println(item)
    for (item <- "Hello Spark".split(" ")) println(item)


    /**
      * while循环，也是循环集合来作为代码块的输入，进而完成流程的控制的，
      * while循环在Server和FrameWork开发中至关重要。
      *
      */
    import scala.util.control.Breaks._

    breakable{
      flag = true
      while (flag) {
        for (item <- "Spark") {
          println(item)
          if (item == 'r'){
            flag = false
            break
          }
        }
      }
    }

    println("while end")


  }

}
